#ifndef KPEXTOPIMGCVTF32C1TOU16C1_H
#define KPEXTOPIMGCVTF32C1TOU16C1_H


#include "kpextVkContext.h"
#include "kpextBaseCompute.h"

namespace kpext {

/**
 * @brief 单通道32位单精度浮点数图像转换为单通道16位无符号数图像操作，输入输出缓冲区的尺寸必须4字节对齐(不足补字节)
 */
class OpImgCvtF32C1toU16C1 : public BaseCompute{
public:
    explicit OpImgCvtF32C1toU16C1(kpextVkContext * ctx);

    virtual ~OpImgCvtF32C1toU16C1() override;

    /**
     * @brief  重新构建计算管线及相关资源, 输入输出缓冲区的尺寸必须4字节对齐(不足补字节)
     * @param cols  输入二维图像的列数
     * @param rows  输入二维图像的行数
     * @param inbuf  输入缓冲
     * @param outbuf  输出缓冲
     */
    virtual void rebuild(int cols,
                         int rows,
                         std::shared_ptr<BaseBuffer> inbuf,
                         std::shared_ptr<BaseBuffer> outbuf
                         );

protected:

    /**
     * @brief 计算着色器的work group size
     */
    std::array<uint32_t, 3> m_workGroupSize;

private:
    using BaseCompute::rebuild;

};  // kpextOpImgCvtF32C1toU16C1

}  // namespace kpext

#endif // KPEXTOPIMGCVTF32C1TOU16C1_H
